//引入User对象
var User = require('../models/user');
//引入Post对象
var Post = require('../models/post');
//引入密码的第三方模块
var crypto = require('crypto');

//权限的判断
//如果用户没有登录，则不能访问发表和退出页面
function checkLogin(req,res,next){
    if(!req.session.user){
        req.flash('error','未登录');
        res.redirect('/login');
    }
    next();
}
//如果用户登录了，则不能访问登录和注册页面.
function checkNotLogin(req,res,next){
    if(req.session.user){
        req.flash('error','已经登录了');
        res.redirect('/');
    }
    next();
}

module.exports = function(app){
    //所有的路由操作都会放在这里.

    //首页
    app.get('/',function(req,res){
        Post.get(null,function(err,posts){
            if(err){
                posts = [];
            }
            res.render('index',{
                title:'首页',
                user:req.session.user,
                posts:posts,
                success:req.flash('success').toString(),
                error:req.flash('error').toString()
            })
        })
    })
    //注册页面
    app.get('/reg',checkNotLogin);
    app.get('/reg',function(req,res){
        res.render('reg',{
            title:'注册',
            user:req.session.user,
            success:req.flash('success').toString(),
            error:req.flash('error').toString()
        })
    })
    //注册行为
    app.post('/reg',checkNotLogin);
    app.post('/reg',function(req,res){
        //1.收集数据
        //2.判断两次密码是否一样
        //3.对密码进行加密处理
        //4.最后将收集好的数据整理完毕
        //5.判断用户名是否存在
        //6.如果不存在，说明可以进行操作，那么就开始新增用户操作
        //7.新增后，将用户信息放入session当中.
        var name = req.body.name;
        var password = req.body.password;
        var password_re = req.body['password-repeat'];
        if(password != password_re){
            req.flash('error','两次输入的密码不一致');
            return res.redirect('/reg');
        }
        var md5 = crypto.createHash('md5');
        var password = md5.update(req.body.password).digest('hex');

        var newUser = new User({
            name:name,
            password:password,
            email:req.body.email
        });
        User.get(newUser.name,function(err,user){
            if(err){
                req.flash('error',err);
                return res.redirect('/reg');
            }
            if(user){
                req.flash('error','用户名已经存在,不要重复注册');
                return res.redirect('/reg');
            }
            newUser.save(function(err,user){
                if(err){
                    req.flash('error',err);
                    return res.redirect('/reg');
                }
                req.session.user = newUser;
                req.flash('success','注册成功');
                return res.redirect('/');
            })
        })
    })
    //登录页面
    app.get('/login',checkNotLogin);
    app.get('/login',function(req,res){
        res.render('login',{
            title:'登录',
            user:req.session.user,
            success:req.flash('success').toString(),
            error:req.flash('error').toString()
        })
    })
    app.post('/login',checkNotLogin);
    app.post('/login',function(req,res){
        //1.首先先生成密码的md5值
        //2.判断一下用户是否存在
        //3.判断一下密码是否正确
        //4.将登陆的用户的信息存入session,然后跳转到首页
        var md5 = crypto.createHash('md5');
        var password = md5.update(req.body.password).digest('hex');

        User.get(req.body.name,function(err,user){
            if(err){
                req.flash('error',err);
                return res.redirect('/login');
            }
            if(!user){
                //不存在的时候
                req.flash('error','用户不存在');
                return res.redirect('/login');
            }
            if(user.password != password){
                req.flash('error','密码错误');
                //加个return
                return res.redirect('/login');
            }
            req.session.user = user;
            req.flash('success','登陆成功');
            return res.redirect('/');
        })
    })
    //退出
    app.get('/logout',checkLogin);
    app.get('/logout',function(req,res){
        req.session.user = null;
        req.flash('success','退出成功');
        return res.redirect('/');

    })
    //发表
    app.get('/post',checkLogin);
    app.get('/post',function(req,res){
        res.render('post',{
            title:'发表',
            user:req.session.user,
            success:req.flash('success').toString(),
            error:req.flash('error').toString()
        })
    })
    app.post('/post',checkLogin)
    app.post('/post',function(req,res){
        //1.数据收集
        //2.数据保存
        //3.跳转到首页
        var currentUser = req.session.user.name;
        var post = new Post(currentUser,req.body.title,req.body.post,req.ip);
        post.save(function(err){
            if(err){
                req.flash('error',err);
                return res.redirect('/');
            }
            req.flash('success','发表成功');
            res.redirect('/');
        })

    })
}
